package com.test.handler;

import com.test.registry.BeanDefinitionRegistry;
import org.dom4j.Element;

/**
 * 命名空间处理器接口，用于处理自定义命名空间的解析和注册逻辑
 */
public interface NamespaceHandler {

    /**
     * 初始化命名空间处理器，可能包括解析器的初始化等工作
     */
    void init();

    /**
     * 解析给定的XML元素，并在指定的Bean定义注册表中注册相应的Bean定义
     *
     * @param element XML元素，包含命名空间相关的配置信息
     * @param registry Bean定义注册表，用于注册解析出的Bean定义
     */
    void parse(Element element, BeanDefinitionRegistry registry);

    /**
     * 装饰给定的XML元素，通过指定的属性名称在Bean定义注册表中注册额外的Bean定义
     *
     * @param element XML元素，需要进行装饰的配置信息
     * @param attributeName 属性名称，用于指定装饰的具体方式或内容
     * @param registry Bean定义注册表，用于注册装饰相关的Bean定义
     */
    void docorate(Element element, String attributeName, BeanDefinitionRegistry registry);
}
